package cn.ibobo.lease.common.util;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * Description: md5加密工具类 <br />
 * Project: meirenhui <br />
 * ClassName: Md5Util <br />
 * Copyright: Copyright (c) 2017 deshang<br />
 * 
 * @author 贾梦莹
 * @version 1.0 2017年10月20日下午6:48:38
 */
public class Md5Util {

	/**
	 * 先拼字符串后缀再md5加密
	 * 
	 * @author 贾梦莹
	 * @createDate 2017年10月20日下午6:56:43
	 * @param code
	 * @return
	 */
	public static String md5Suffix(String code) {
		return md5Encrypt(code + Constant.SUFFIX);
	}

	/**
	 * 先md5加密，添加后缀再md5加密
	 * 
	 * @author bushy
	 * @createDate 2017年12月12日下午4:45:59
	 * @param code
	 * @return
	 */
	public static String md5No2(String code) {
		String md5Str = md5Encrypt(code);
		return md5Encrypt(md5Str + Constant.SUFFIX);
	}

	public static String md5Encrypt(String code) {
		MessageDigest md5 = null;
		try {
			md5 = MessageDigest.getInstance("MD5");
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}
		char[] charArray = code.toCharArray();
		byte[] byteArray = new byte[charArray.length];
		for (int i = 0; i < charArray.length; i++) {
			byteArray[i] = (byte) charArray[i];
		}
		byte[] md5Bytes = md5.digest(byteArray);
		StringBuffer hexValue = new StringBuffer();
		for (int i = 0; i < md5Bytes.length; i++) {
			int val = ((int) md5Bytes[i]) & 0xff;
			if (val < 16) {
				hexValue.append("0");
			}
			hexValue.append(Integer.toHexString(val));
		}
		return hexValue.toString();
	}

	/**
	 * MD5加密算法二,先进行一次加密,再拼接后缀进行二次加密
	 * 
	 * @author qzheng
	 * @createDate 2018年1月12日下午3:25:57
	 * @param code
	 * @return
	 */
	public static String getMd5No2(String code) {
		String md5Str = getMd5Encode(code);
		return getMd5Encode(md5Str + Constant.SUFFIX);
	}

	/**
	 * MD5加密算法二
	 * 
	 * @author qzheng
	 * @createDate 2018年1月12日下午3:25:29
	 * @param text
	 * @return
	 */
	public static String getMd5Encode(String text) {
		try {
			MessageDigest digest = MessageDigest.getInstance("MD5");
			byte[] result = digest.digest(text.getBytes());
			StringBuilder sb = new StringBuilder();
			for (byte b : result) {
				int number = b & 0xff;
				String hex = Integer.toHexString(number);
				if (hex.length() == 1) {
					sb.append("0").append(hex);
				} else {
					sb.append(hex);
				}
			}
			return sb.toString();
		} catch (NoSuchAlgorithmException e) {
			return "";
		}
	}

	/*public static void main(String[] args) {
		String md5Str = Md5Util.getMd5Encode("1");
		System.out.println(md5Str);
	}*/

}
